{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "b75c96fc-e399-4f81-bcf8-8a5d15bcb79b",
   "metadata": {},
   "source": [
    "# Conversation with Agent"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "25d30c19de76e93f",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "In this notebook, we will show a demo of how to program a multi-agent conversation in AgentScope. The complete codes can be found in `examples/conversation/conversation.py`, which sets up a user agent and an assistant agent to have a conversation. When user input \"exit\", the conversation ends. You can modify the `sys_prompt` to change the role of assistant agent."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5f8b1a15-cf1a-46ff-8a62-88d7476c8608",
   "metadata": {},
   "source": [
    "To install AgentScope, please follow the steps in [README.md](../README.md#installation)."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4ccebee3-9a27-47d9-9133-40126b888593",
   "metadata": {},
   "source": [
    "First, set the configs of the models you use."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c60227f7-7380-4f72-b653-bc7394cfaace",
   "metadata": {},
   "outputs": [],
   "source": [
    "import agentscope\n",
    "from agentscope.agents import DialogAgent\n",
    "from agentscope.agents import UserAgent\n",
    "from agentscope.pipelines.functional import sequentialpipeline\n",
    "\n",
    "agentscope.init(\n",
    "    model_configs=[\n",
    "        {\n",
    "            \"model_type\": \"openai_chat\",\n",
    "            \"config_name\": \"gpt-3.5-turbo\",\n",
    "            \"model_name\": \"gpt-3.5-turbo\",\n",
    "            \"api_key\": \"xxx\",  # Load from env if not provided\n",
    "            \"organization\": \"xxx\",  # Load from env if not provided\n",
    "            \"generate_args\": {\n",
    "                \"temperature\": 0.5,\n",
    "            },\n",
    "        },\n",
    "        {\n",
    "            \"model_type\": \"post_api_chat\",\n",
    "            \"config_name\": \"my_post_api\",\n",
    "            \"api_url\": \"https://xxx\",\n",
    "            \"headers\": {},\n",
    "        },\n",
    "    ],\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "503f7e7a-7a93-468d-b88b-37540f607083",
   "metadata": {},
   "source": [
    "Then, initialize two agents, one is used as an assistant agent, and the other one is a user agent."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "848270c3-b73b-482d-a426-49e0ac67dc39",
   "metadata": {},
   "outputs": [],
   "source": [
    "dialog_agent = DialogAgent(\n",
    "    name=\"Assistant\",\n",
    "    sys_prompt=\"You're a helpful assistant.\",\n",
    "    model_config_name=\"gpt-3.5-turbo\",  # replace by your model config name\n",
    ")\n",
    "user_agent = UserAgent()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "128356259909067b",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "Start the conversation between user and assistant. Input \"exit\" to quit."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e46f7a9d-355b-46cd-86b5-201c91eabffb",
   "metadata": {},
   "outputs": [],
   "source": [
    "x = None\n",
    "while x is None or x.content != \"exit\":\n",
    "    x = dialog_agent(x)\n",
    "    x = user_agent(x)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "adc601a8-144f-4e42-bc86-f0e14adb39b5",
   "metadata": {},
   "source": [
    "To code it easier, you can use pipeline in [`agentscope.pipelines`](https://github.com/modelscope/agentscope/blob/main/src/agentscope/pipelines/pipeline.py) and [`agentscope.pipelines.functional`](https://github.com/modelscope/agentscope/blob/main/src/agentscope/pipelines/functional.py)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6057d6c5-a332-4949-84a7-6fbeda021561",
   "metadata": {},
   "outputs": [],
   "source": [
    "x = None\n",
    "while x is None or x.content != \"exit\":\n",
    "    x = sequentialpipeline([dialog_agent, user_agent], x)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aed5ff6a-5167-4450-be57-b42ee8ae5e92",
   "metadata": {},
   "source": [
    "We show the following dialog as an example."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9cb11109-4229-4faa-a859-9e806d9c2a6f",
   "metadata": {},
   "source": [
    "Assistant: Thank you! I'm here to assist you with any questions or tasks you have. How can I help you today?\n",
    "\n",
    "User:  Please help me arrange a day trip to Hangzhou.\n",
    "\n",
    "Assistant: Certainly! I can help you with that. When are you planning to visit Hangzhou?\n",
    "\n",
    "User:  Tomorrow\n",
    "\n",
    "Assistant: Great! Tomorrow sounds like a good day for a day trip to Hangzhou. Here's a suggested itinerary for your day trip:\n",
    "\n",
    "1. Depart from your current location: It's important to plan your departure time to arrive in Hangzhou early in the morning. You can consider taking a train or bus, or hiring a private driver for the trip.\n",
    "\n",
    "2. West Lake: Start your day by visiting West Lake, which is the heart of Hangzhou. Take a leisurely stroll along the lake and enjoy the beautiful scenery. You can also rent a boat or take a cruise to explore the lake.\n",
    "\n",
    "3. Lingyin Temple: After visiting West Lake, head to Lingyin Temple, one of the most famous Buddhist temples in China. Marvel at the intricate architecture and explore the peaceful surroundings.\n",
    "\n",
    "4. Hefang Street: Next, make your way to Hefang Street, a vibrant pedestrian street filled with shops, street vendors, and traditional food stalls. Take some time to shop for souvenirs or try some local snacks.\n",
    "\n",
    "5. Longjing Tea Plantations: As Hangzhou is renowned for its tea, a visit to the Longjing Tea Plantations is a must. Take a short trip to the outskirts of Hangzhou and immerse yourself in the serene tea fields. You can also participate in a tea ceremony and learn about the tea-making process.\n",
    "\n",
    "6. Return to your starting point: After a full day of exploring Hangzhou, it's time to head back to your starting point. Plan your return journey accordingly, whether it's by train, bus, or with the help of a hired driver.\n",
    "\n",
    "Remember to check the opening hours of the attractions and plan your time accordingly. Also, be prepared for the weather and make sure to bring comfortable shoes, a hat, and sunscreen. Enjoy your day trip to Hangzhou!\n",
    "\n",
    "User:  exit"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.18"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
